home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / MacPerl 5.1.3 / Mac_Perl_513_src / MacPerl5 / MPAEUtils.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-01  |  4.7 KB  |  210 lines  |  [TEXT/MPS ]

  1. /*********************************************************************
  2. Project    :    MacPerl            -    Real Perl Application
  3. File        :    MPAEUtils.c        -
  4. Author    :    Matthias Neeracher
  5.  
  6. A lot of this code is borrowed from 7Edit written by
  7. Apple Developer Support UK
  8.  
  9. Language    :    MPW C
  10.  
  11. $Log: MPAEUtils.c,v $
  12. Revision 1.1  1994/02/27  22:59:32  neeri
  13. Initial revision
  14.  
  15. Revision 0.1  1993/05/29  00:00:00  neeri
  16. Compiles correctly
  17.  
  18. *********************************************************************/
  19.  
  20. #if !defined(powerc) && !defined(__powerc)
  21. #pragma segment Main
  22. #endif
  23.  
  24. #include "MPAEUtils.h"
  25. #include "MPUtils.h"
  26.  
  27. #include <AERegistry.h>
  28.  
  29.  
  30. /**-----------------------------------------------------------------------
  31.     Utility Routines for getting data from AEDesc's
  32.   -----------------------------------------------------------------------**/
  33.  
  34. pascal void GetRawDataFromDescriptor(
  35.     const AEDesc *theDesc,
  36.     Ptr     destPtr,
  37.     Size    destMaxSize,
  38.     Size    *actSize)
  39. {
  40.     Size copySize;
  41.  
  42.     if (theDesc->dataHandle) {
  43.         HLock((Handle)theDesc->dataHandle);
  44.         *actSize = GetHandleSize((Handle)theDesc->dataHandle);
  45.  
  46.         copySize = LesserOf(*actSize, destMaxSize);
  47.  
  48.         BlockMove(*theDesc->dataHandle, destPtr, copySize);
  49.  
  50.         HUnlock((Handle)theDesc->dataHandle);
  51.     } else
  52.         *actSize = 0;
  53. } /*GetRawDataFromDescriptor*/
  54.  
  55. pascal OSErr GetPStringFromDescriptor(const AEDesc *sourceDesc, char *resultStr)
  56. {
  57.     OSErr        myErr;
  58.     Size     stringSize;
  59.     AEDesc   resultDesc;
  60.  
  61.     resultStr[0] = 0;
  62.  
  63.     if (myErr = AECoerceDesc(sourceDesc, typeChar, &resultDesc))
  64.         return myErr;
  65.  
  66.     GetRawDataFromDescriptor(&resultDesc, (Ptr)&resultStr[1], 255, &stringSize);
  67.  
  68.     if (stringSize<256)
  69.         resultStr[0] = (char)stringSize;
  70.     else
  71.         myErr = errAECoercionFail;
  72.  
  73.     if (resultDesc.dataHandle)
  74.         AEDisposeDesc(&resultDesc);
  75.  
  76.     return myErr;
  77. }
  78.  
  79. pascal OSErr GetIntegerFromDescriptor(const AEDesc *sourceDesc, short *result)
  80. {
  81.     OSErr   myErr;
  82.     Size    intSize;
  83.     AEDesc  resultDesc;
  84.  
  85.     *result = 0;
  86.  
  87.     if (myErr = AECoerceDesc(sourceDesc, typeShortInteger, &resultDesc))
  88.         return myErr;
  89.  
  90.     GetRawDataFromDescriptor(&resultDesc, (Ptr)result, 2, &intSize);
  91.     if (intSize>2)
  92.         myErr = errAECoercionFail;
  93.  
  94.     if (resultDesc.dataHandle)
  95.         AEDisposeDesc(&resultDesc);
  96.  
  97.     return myErr;
  98. }
  99.  
  100. pascal OSErr GetBooleanFromDescriptor(const AEDesc *sourceDesc, Boolean *result)
  101. {
  102.     OSErr  myErr;
  103.     Size   boolSize;
  104.     AEDesc resultDesc;
  105.  
  106.     *result = false;
  107.  
  108.     if (myErr = AECoerceDesc(sourceDesc, typeBoolean,&resultDesc))
  109.         return myErr;
  110.  
  111.     GetRawDataFromDescriptor(&resultDesc, (Ptr)result, sizeof(Boolean), &boolSize);
  112.     if (boolSize>sizeof(Boolean))
  113.         myErr = errAECoercionFail;
  114.  
  115.     if (resultDesc.dataHandle)
  116.         AEDisposeDesc(&resultDesc);
  117.  
  118.     return myErr;
  119. }
  120.  
  121. pascal OSErr GetLongIntFromDescriptor(const AEDesc *sourceDesc, long   *result)
  122. {
  123.     OSErr   myErr;
  124.     Size    intSize;
  125.     AEDesc  resultDesc;
  126.  
  127.     *result = 0;
  128.  
  129.     if (myErr = AECoerceDesc(sourceDesc, typeLongInteger, &resultDesc))
  130.         return myErr;
  131.  
  132.     GetRawDataFromDescriptor(&resultDesc, (Ptr)result, 4, &intSize);
  133.     if (intSize>4)
  134.         myErr = errAECoercionFail;
  135.  
  136.     if (resultDesc.dataHandle)
  137.         AEDisposeDesc(&resultDesc);
  138.  
  139.     return myErr;
  140. } /*GetLongIntFromDescriptor*/
  141.  
  142. pascal OSErr GetRectFromDescriptor(const AEDesc *sourceDesc, Rect *result)
  143. {
  144.     OSErr   myErr;
  145.     Size    rectSize;
  146.     AEDesc  resultDesc;
  147.  
  148.     SetRect(result,0,0,0,0);
  149.  
  150.     if (myErr = AECoerceDesc(sourceDesc,typeQDRectangle,&resultDesc))
  151.         return myErr;
  152.  
  153.     GetRawDataFromDescriptor(&resultDesc, (Ptr)result, sizeof(Rect),  &rectSize);
  154.     if (rectSize<sizeof(Rect))
  155.         myErr = errAECoercionFail;
  156.  
  157.     if (resultDesc.dataHandle)
  158.         AEDisposeDesc(&resultDesc);
  159.  
  160.     return myErr;
  161. } /*GetRectFromDescriptor*/
  162.  
  163. pascal OSErr GetPointFromDescriptor(const AEDesc *sourceDesc, Point  *result)
  164. {
  165.     OSErr   myErr;
  166.     Size    ptSize;
  167.     AEDesc  resultDesc;
  168.  
  169.     SetPt(result,0,0);
  170.  
  171.     if (myErr = AECoerceDesc(sourceDesc,typeQDPoint,&resultDesc))
  172.         return myErr;
  173.  
  174.     GetRawDataFromDescriptor(&resultDesc, (Ptr)result, sizeof(Point), &ptSize);
  175.     if (ptSize<sizeof(Point))
  176.         myErr = errAECoercionFail;
  177.  
  178.     if (resultDesc.dataHandle)
  179.         AEDisposeDesc(&resultDesc);
  180.  
  181.     return myErr;
  182. } /*GetPointFromDescriptor*/
  183.  
  184.  
  185. /*
  186.     Name:    PutStyledTextFromDescIntoTEHandle
  187.     Purpose: Takes the text in an AEDesc containing typeIntlText and puts it in
  188.              a styled text edit record at the current insertion point.
  189.                      Looks for typeIntlText, typeStyledText, typeChar in that order.
  190. */
  191.  
  192. pascal OSErr GetTextFromDescIntoTEHandle(const AEDesc *sourceTextDesc, TEHandle theHTE)
  193. {
  194.     AEDesc rawTextDesc;
  195.     OSErr  myErr;
  196.  
  197.     if (myErr = AECoerceDesc(sourceTextDesc, typeChar, &rawTextDesc))
  198.         return myErr;
  199.  
  200.     HLock((Handle)rawTextDesc.dataHandle);
  201.     TEInsert((*rawTextDesc.dataHandle), GetHandleSize(rawTextDesc.dataHandle), theHTE);
  202.     HUnlock((Handle)rawTextDesc.dataHandle);
  203.  
  204.     if (rawTextDesc.dataHandle)
  205.         AEDisposeDesc(&rawTextDesc);
  206.  
  207.     return noErr;
  208. }
  209.  
  210.